<?php

namespace App\Http\Controllers;

use App\Models\Admin\InterfaceConfiguration;
use App\Models\Admin\SupplierConfiguration;
use App\Models\Mysql\XnGoodsCarmyType;
use Illuminate\Foundation\Auth\Access\AuthorizesRequests;
use Illuminate\Foundation\Bus\DispatchesJobs;
use Illuminate\Foundation\Validation\ValidatesRequests;
use Illuminate\Http\Request;
use Illuminate\Routing\Controller as BaseController;

class Controller extends BaseController
{
    use AuthorizesRequests, DispatchesJobs, ValidatesRequests;

    public function __construct(public Request $request)
    {
    }

    //成功返回方法
    public function sendResponse($result, $message, $code = [])
    {
        $headers = ['Content-Type' => 'application/json;charset=UTF-8', 'charset' => 'utf-8'];

        $response = [
            'success' => true,
            'data' => $result,
            'message' => $message,
        ];
        if (!empty($code)){
            $response['code'] = $code;
        }
        return response()->json($response, 200, $headers, JSON_UNESCAPED_UNICODE);
    }

    //返回失败的方法
    public function sendError($error, $errorCode = [], $code = 200)
    {
        $response = [
            'success' => false,
            'message' => $error,
        ];

        if (!empty($errorCode)) {
            $response['code'] = $errorCode;
        }
        return response()->json($response, $code);
    }

    //验证手机号正则
    public function is_phone($phone)
    {
        $reg_exs = [
            '/^1[0-9]{10}$/',//接受所有以1开头的11位数字，不区分移动、联通、电信
            '/^(13[4-9]|14[7-8]|15[0-2,7-9]|166|17[2-8]|18[2-4,7-8]|19[8,9])d{8}$/',//接受所有移动手机号码
            '/^(13[0-2]|15[5-6]|17[56]|18[5-6]|145|166)d{8}$/',//接受所有联通手机号码
            '/^(133|153|170[0-2]|173|177|180|181|189|199)d{8}$/'//接受所有电信手机号码
        ];
        foreach ($reg_exs as $reg_ex) {
            if (preg_match($reg_ex, $phone)) {
                return true;
            }
        }
        return false;
    }

    //对象转数组
    public function to_array($object)
    {
        return json_decode(json_encode($object), true);
    }

    //验证身份证号是否合规
    function check_id_card($id_card)
    {
        $preg = "/^[1-9]\d{5}[1-9]\d{3}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{4}$/";
        if (preg_match($preg, $id_card)) {
            return true;
        } else {
            return false;
        }
    }

    //判断一个时间在不在一段时间之内
    public function rangeTime($startTime, $endTime)
    {
        $startTime = strtotime($startTime);
        $endTime = strtotime($endTime);
        $date = strtotime(date("H:i:s", time()));
        $start_time = strtotime(date('H:i:s', $startTime)); //上架时间
        $end_time = strtotime(date('H:i:s', $endTime));//下架时间
        if ($date >= $start_time && $date <= $end_time) {
            return true;
        } else {
            return false;
        }
    }

    //xml转数组
    public function XML_array($xml)
    {
        //Xml转数组
        if ($xml == '') return '';
        libxml_disable_entity_loader(true);
        $arr = json_decode(json_encode(simplexml_load_string($xml, 'SimpleXMLElement', LIBXML_NOCDATA)), true);
        return $arr;
    }

    //商品查询第三方归属
    public function belong($info)
    {
        foreach ($info as $v) {
            if ($v['o_type'] != 0) {
                $v['goods_belong'] = XnGoodsCarmyType::where('type', $v['goods_belong'])->value('name');
            } else {
                $v['goods_belong'] = InterfaceConfiguration::where('id', $v['goods_belong'])->value('title');
            }
        }
    }

    /**
     * 将数值金额转换为中文大写金额
     * @param $amount float 金额(支持到分)
     * @param $type   int   补整类型,0:到角补整;1:到元补整
     * @return mixed 中文大写金额
     */
    public function Number_conversion_to_uppercase($amount, $type = 1) {
        // 判断输出的金额是否为数字或数字字符串
        if(!is_numeric($amount)){
            return "要转换的金额只能为数字!";
        }

        // 金额为0,则直接输出"零元整"
        if($amount == 0) {
            return "人民币零元整";
        }

        // 金额不能为负数
        if($amount < 0) {
            return "要转换的金额不能为负数!";
        }

        // 金额不能超过万亿,即12位
        if(strlen($amount) > 12) {
            return "要转换的金额不能为万亿及更高金额!";
        }

        // 预定义中文转换的数组
        $digital = array('零', '壹', '贰', '叁', '肆', '伍', '陆', '柒', '捌', '玖');
        // 预定义单位转换的数组
        $position = array('仟', '佰', '拾', '亿', '仟', '佰', '拾', '万', '仟', '佰', '拾', '元');

        // 将金额的数值字符串拆分成数组
        $amountArr = explode('.', $amount);

        // 将整数位的数值字符串拆分成数组
        $integerArr = str_split($amountArr[0], 1);

        // 将整数部分替换成大写汉字

        $integerArrLength = count($integerArr);     // 整数位数组的长度
        $positionLength = count($position);         // 单位数组的长度
        for($i = 0; $i < $integerArrLength; $i++) {
            // 如果数值不为0,则正常转换
            if($integerArr[$i] != 0){
                $result =   $digital[$integerArr[$i]] . $position[$positionLength - $integerArrLength + $i];
            }else{
                // 如果数值为0, 且单位是亿,万,元这三个的时候,则直接显示单位
                if(($positionLength - $integerArrLength + $i + 1)%4 == 0){
                    $result = $position[$positionLength - $integerArrLength + $i];
                }
            }
        }

        // 如果小数位也要转换
        if($type == 0) {
            // 将小数位的数值字符串拆分成数组
            $decimalArr = str_split($amountArr[1], 1);
            // 将角替换成大写汉字. 如果为0,则不替换
            if($decimalArr[0] != 0){
                $result = $result . $digital[$decimalArr[0]] . '角';
            }
            // 将分替换成大写汉字. 如果为0,则不替换
            if($decimalArr[1] != 0){
                $result = $result . $digital[$decimalArr[1]] . '分';
            }
        }else{
            $result = $result . '整';
        }
        return $result;
    }

    //获取供应商id
    public function supplier_id(){
        $host = $_SERVER['HTTP_SHABINGINX'];
        /** @var SupplierConfiguration|null $config **/
        $supplier_id = SupplierConfiguration::query()->firstWhere('domain',$host);
        return $supplier_id->sid;
    }
}


